perm filename III.FAI[VV,BGB] blob
sn#133450 filedate 1974-12-03 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE III - III DISPLAY SUBROUTINES - BGB - JANUARY 1973.
C00003 00003 SUBR(DPYSET,BUFFER) INITIALIZE A DISPLAY BUFFER.
C00005 00004 SUBRS AVECT,AIVECT,RVECT,RIVECT Vectors
C00007 00005 SUBR(DPYSTR,TEXT)
C00010 00006 SUBRS OCTDPY,DECDPY,FLODPY Numeric display
C00013 ENDMK
C⊗;
TITLE III - III DISPLAY SUBROUTINES - BGB - JANUARY 1973.
.INSERT M
DPYBUF↑: .+2 ↔ =2000 ↔ BLOCK =2000
IGNORE: 0
SIZBRT: 0
DPYCOL: 0
DPYPTR↑: 0
BUFEND: 0
BUFHD: 0↔0 ;UPG ARGUMENT. ;ADDRESS ↔ LENGTH.
;VERNIER III TEXT POSITIONING.
VERNX ←← 14
VERNY ←← 11
;DISPLAY SAIL STRING.
DPYSST↑: POP 16,1↔POP 16,2↔SKIPGE IGNORE↔POPJ P,
HRRZS 2 ;LENGTH OF STRING.
JUMPLE 2,SSRET
ILDB 3,1
IDPB 3,DPYPTR
SOJG 2,.-2
SSRET: HRRZ 1,DPYPTR
CAML 1,BUFEND
SETOM IGNORE
POPJ P,
SUBR(DPYSET,BUFFER) ;INITIALIZE A DISPLAY BUFFER.
COMMENT .-----------------------------------------------------------.
A←←1
ACCUMULATORS{B,C}
LAC 1,BUFFER↔CDR 2,-1(1) ;BUFFER SIZE.
ADDI 2,-1(1)↔DAC 2,BUFEND
ADDI 1,2↔DAC 1,BUFHD ;POINT TO THIRD WORD.
SETZM IGNORE
SETZM SIZBRT
CLR2: LAC A,BUFHD ;BLIT III-TEXT OPCODE-1 THRU THE BUFFER.
MOVEI B,1↔DAC B,1(A)
MOVEI B,2(A)↔HRLI B,1(A)
BLT B,@BUFEND
PUSH P,(P)↔GO LV3
ENDR DPYSET;---------------------------------------------------------
SUBR(DPYBIG,SIZE) ;SET CHARACTER SIZE.
COMMENT .-----------------------------------------------------------.
LAC SIZE
DPB [POINT 3,SIZBRT,27] ;REMEMBER NEW SIZE
POP1J
ENDR DPYBIG;---------------------------------------------------------
SUBR(DPYBRT,SIZE) ;SET BRIGHTNESS.
COMMENT .-----------------------------------------------------------.
LAC SIZE
DPB [POINT 3,SIZBRT,24] ;REMEMBER NEW BRIGHTNESS
POP1J
ENDR DPYBRT;---------------------------------------------------------
;SUBRS AVECT,AIVECT,RVECT,RIVECT ;Vectors
COMMENT ⊗
TEXT DISPLAY WORD: ASCII/ABCDE/ + 1
LONG VECTOR WORD: BYTE(11)X,Y(3)BRT,SIZ(7)OPCODE ⊗
SUBR(RIVECT)
GO RIV. ↔ENDR RIVECT
SUBR(RVECT)
GO RV. ↔ENDR RVECT
SUBR(AIVECT)
GO AIV. ↔ENDR AIVECT
SUBR(AVECT)
GO AV. ↔ENDR AVECT
;USES AC 1-3
;DTYO DEPENDS ON THIS
RIV.: SKIPA 3,[046] ;RELATIVE INVISIBLE VECTOR.
RV.: MOVEI 3, 006 ↔GO LV0 ;RELATIVE VISIBLE VECTOR.
AIV.: SKIPA 3,[146] ;ABSOLUTE INVISIBLE VECTOR.
AV.: MOVEI 3, 106 ;ABSOLUTE VISIBLE VECTOR.
SETZM DPYCOL ;RESET TAB LOCATION
LV0: SKIPGE IGNORE↔POP2J
LV: LAC 1,-2(P)↔LAC 2,-1(P) ;PICKUP X AND Y.
LVC: DPB 1,[POINT 11,3,10] ;PACK X INTO III-WORD.
DPB 2,[POINT 11,3,21] ;PACK Y INTO III-WORD.
SKIPE 1,SIZBRT ;NEW BRIGHTNESS OR SIZE?
GO [ IOR 3,1↔SETZM SIZBRT↔GO LV2] ;YES, SET IT
LV2: AOS 1,DPYPTR↔DAC 3,(1) ;PACK WORD INTO III-BUFFER.
LV3: HRLI 1,<(<POINT 7,0,35>)> ;UPDATE DPYPTR...
DAC 1,DPYPTR↔MOVEI 1,(1) ;WHICH IS A BYTE-POINTER.
CAML 1,BUFEND↔SETOM IGNORE ;CHECK FOR BUFFER OVERFLOW.
POP2J
SUBR(DPYSTR,TEXT)
COMMENT .-----------------------------------------------------------.
;USES AC 1,3
SKIPE IGNORE↔POP1J
LAC 3,TEXT↔HRLI 3,440700
L1: ILDB 3↔JUMPE POP1J.
CALL(DTYO,0)↔GO L1
ENDR DPYSTR;---------------------------------------------------------
SUBR(DTYO,CHAR)
COMMENT .-----------------------------------------------------------.
;USES AC 1
;DPYSTR DEPENDS ON DTYO NOT CLOBBERING 3
SKIPE IGNORE↔POP1J
SKIPE SIZBRT
GO [ PUSHP 0↔PUSHP 2↔PUSHP 3
CALL(RIVECT,[0],[0])
POPP 3↔POPP 2↔POPP 0
GO .+1]
LAC 1,CHAR
CAIN 1,15↔SETOM DPYCOL
CAIN 1,11↔GO DOTAB
DTYO1: IDPB 1,DPYPTR↔AOS DPYCOL
CDR 1,DPYPTR↔CAML 1,BUFEND
SETOM IGNORE↔POP1J
DOTAB: CALL(DTYO,[" "]) ;We got a tab, put out spaces until
LAC 1,DPYCOL ;column is divisible by 8
TRNE 1,7↔GO DOTAB
CDR 1,DPYPTR
POP1J
ENDR DTYO;-----------------------------------------------------------
SUBR(DPYOUT,POG)
COMMENT .-----------------------------------------------------------.
A←←1
ACCUMULATORS{B,C}
SKIPN A,BUFHD↔GO L1
LAC 2,DPYPTR↔DAC 2,-2(1)
MOVEI 2,2(2)↔SUB 2,1↔DAC 2,-1(1)
L1: CDR B,DPYPTR↔SUB B,BUFHD ;BUFFER LENGTH.
AOS B↔DAC B,BUFHD+1
MOVM A,POG↔DPB A,[POINT 4,UPGOP,12] ;GLASS TO AC FIELD.
UPGOP: 703B8+BUFHD
JFCL
POP1J
ENDR DPYOUT;---------------------------------------------------------
;SUBRS OCTDPY,DECDPY,FLODPY ;Numeric display
;--------------------------------------------------------------------
SUBR(OCTDPY,INTEGER) ;OCTAL NUMBER DISPLAY.
Q←15 ↔ N←13
JFCL↔GO L2
LAC 14,INTEGER↔LAC Q,[POINT 3,14,-1]↔MOVEI N,6
L1: ILDB Q↔IORI 60↔CALL(DTYO,0)↔SOJG N,L1
CALL(DTYO,[" "])
L2: LAC 14,INTEGER↔LAC Q,[POINT 3,14,17]↔MOVEI N,6
L3: ILDB Q↔IORI 60↔CALL(DTYO,0)↔SOJG N,L3
POP1J
ENDR OCTDPY;3/25/73(BGB)---------------------------------------------
DECDPY↑:;(INTEGER) ;DECIMAL NUMBER DISPLAY.
BEGIN DECDPY
LAC 1,-1(P)↔POP P,-1(P) ;FETCH ARG AND LAC RET. ADR.
L1: JUMPGE 1,L2 ;TEST FOR NEGATIVE NUMBER.
MOVM 2,1↔CALL(DTYO,["-"]) ;PRINT MINUS SIGN.
LAC 1,2
L2: IDIVI 1,12↔PUSH P,2 ;MODULO TEN AND SAVE.
SKIPE 1↔PUSHJ P,L2 ;TEST FOR DONE.
POP P,1↔ADDI 1,60↔CALL(DTYO,1) ;RESTORE & PRINT.
POPJ P,
BEND DECDPY;12/17/72(BGB)--------------------------------------------
SUBR(FLODPY,FLONUM,PLACES) ;FLOATING NUMBER DISPLAY.
LAC FLONUM
JUMPL[CALL(DTYO,["-"])↔MOVM FLONUM↔GO .+1]
MOVM 2,PLACES↔CAILE 2,6↔MOVEI 2,6↔DAC 2,PLACES
FMPR[1.↔10.↔100.↔1000.↔10000.↔100000.↔1000000.](2)↔FIXX
IDIV[=1↔=10↔=100↔=1000↔=10000↔=100000↔=1000000](2)
PUSHP 1↔CALL(DECDPY,0)↔POPP 0
LAC 2,PLACES
ADD[=1↔=10↔=100↔=1000↔=10000↔=100000↔=1000000](2)
PUSHP DPYPTR↔CALL(DECDPY,0)↔POPP 1
MOVEI "."↔IDPB 0,1
POP2J
ENDR FLODPY;12/17/72(BGB)--------------------------------------------
END